home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_09_11 / 9n11104a < prev    next >
Text File  |  1991-09-25  |  1KB  |  62 lines

  1.  
  2. #include <ctype.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. //
  7. // a String class with overloaded constructors
  8. //
  9. class String
  10.     {
  11. public:
  12.     String(const char *s)
  13.         {
  14.         len = strlen(s);
  15.         str = strcpy(new char[len + 1], s);
  16.         }
  17.     String(const String &s)
  18.         {
  19.         len = s.len;
  20.         str = strcpy(new char[len + 1], s.str);
  21.         }
  22.     ~String() { delete str; }
  23.     size_t length() { return len; }
  24.     const char *text() { return str; }
  25.     void cat(char c);
  26.     char &sub(size_t i)
  27.         {
  28.         if (i > len)
  29.             /* error */;
  30.         return str[i];
  31.         }
  32. private:
  33.     size_t len;
  34.     char *str;
  35.     };
  36.  
  37. void String::cat(char c)
  38.     {
  39.     char *p = strcpy(new char[len + 1], str);
  40.     p[len++] = c;
  41.     p[len] = '\0';
  42.     delete str;
  43.     str = p;
  44.     }
  45.  
  46. int main()
  47.     {
  48.     size_t i;
  49.     String s1("hello");     // s1 = "hello"
  50.     String s2(s1);          // s2 = "hello"
  51.     s2.cat('!');            // s2 = "hello!"
  52.     printf("s1 = %s\n", s1.text());
  53.     printf("s2 = %s\n", s2.text());
  54.     for (i = 0; i < s1.length(); ++i)
  55.         s1.sub(i) = toupper(s1.sub(i));
  56.                             // s1 = "HELLO"
  57.     printf("s1 = %s\n", s1.text());
  58.     printf("s2 = %s\n", s2.text());
  59.     return 0;
  60.     }
  61.  
  62.